import dayjs from 'dayjs'

// tree数组扁平化
export const flatten = (tree) => {
    const result = []
    const flattenTree = (list) => {
        list.map(item => {
            result.push(item)
            if (item.children) {
                flattenTree(item.children, result)
            }
        })
    }
    flattenTree(tree)
    result.map(menu => {
        delete menu.children
    })
    return result
}

// 一维数组转树形结构
export const arrayToTree = (arr) => {
    // 把一位数组变成一个对象，就可以通过map[id]去获取指定的项的参数了
    const map = {}
    const result = []
//  构建映射， 以便快速查找每个节点
    arr.forEach(item => {
        map[item.id] = {...item, children: []}
    })
    // 将节点添加到树结构中
    arr.forEach(item => {
        if (item.parentId) {
            // 如果有 parentId，则将当前节点添加到父节点的 children 数组中
            if (map[item.parentId]) {
                map[item.parentId].children.push(map[item.id])
            }
        } else {
            // 没有 parentId 的节点将被视为根节点
            result.push(map[item.id])
        }
    })
    return result
}

/* 模拟page请求
*  @params {array} arr 数据列表
*  @params {object} config 请求参数
*  @params {string} key1 搜索关键字1
*  @params {string} key2 搜索关键字2
* */
export const setPageData = (arr, config, key1, key2) => {
    let _list = arr.list
    if (config.body.keyword) {
        _list = arr.list.filter(item => item[key1].indexOf(config.body.keyword) > -1 || item[key2].indexOf(config.body.keyword) > -1)
    }
    const _total = _list.length
    _list = _list.slice((config.body.pageNum - 1) * config.body.pageSize, (config.body.pageNum) * config.body.pageSize)
    return {
        code: 200,
        data: {
            total: _total,
            list: _list
        },
        message: 'OK'
    }
}

/* 模拟delete请求
* @params {object} config: 请求参数
* @params {string} regApi: 接口，用于截取id
* @params {object} pageData: 数据列表
* @params {array} exclude: 过滤不能删的数据
* */
export const delData = (config, regApi, pageData, exclude = []) => {
    const _id = config.url.replace(regApi, '')
    if (exclude.includes(+_id)) {
        return {
            code: 500,
            data: '该数据不允许删除',
            message: '基础数据，禁止删除'
        }
    }
    const index = pageData.list.findIndex(({id}) => id === +_id)
    if (index > -1) {
        pageData.list.splice(index, 1)
        return {
            code: 200,
            data: '删除成功',
            message: '删除成功'
        }
    } else {
        return {
            code: 500,
            data: _id,
            message: '删除失败，未找到该数据！'
        }
    }
}

// 模拟save
export const saveData = (config, pageData) => {
    let requestBody = config.body
    const index = pageData.list.findIndex(({id}) => id === requestBody.id)
    if (index > -1) {
        // 重复的替换
        pageData.list.splice(index, 1, requestBody)
    } else {
        // 没有重复的，新增
        requestBody.id = pageData.list.length + 2
        requestBody.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss')
        pageData.list.unshift(requestBody)
    }
    return {
        code: 200,
        data: requestBody,
        message: '保存成功'
    }
}
